/**
 * 
 */
package com.eej.act.obj;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import com.eej.act.R;

import android.content.Context;
import android.util.Log;

/**
 * @author jlumietu
 *
 */
public class DataManager {

	public static final String LIGA_SANMIGUEL_ID = "sm";
	public static final String LIGA_EUSKOTREN_ID = "et";
	
	public static final String LIGA_SANMIGUEL_RUTA_EQUIPOS = "taldeak_lsm.plist";
	public static final String LIGA_EUSKOTREN_RUTA_EQUIPOS = "taldeak_let.plist";
	
	public static final String LIGA_SANMIGUEL_RUTA_CALENDARIO = "estropadak_lsm.plist";
	public static final String LIGA_EUSKOTREN_RUTA_CALENDARIO = "estropadak_let.plist";
	
	Hashtable<String, Liga> hash = new Hashtable<String, Liga>();
	Hashtable<String, String> rutaEquipos = new Hashtable<String, String>();
	Hashtable<String, String> rutaCalendario = new Hashtable<String, String>();
	
	private static DataManager manager = null;
	
	public static Context context;
	
	/**
	 * 
	 */
	private DataManager(){
		Log.e("DataManager", "Constructora; hash es null? " + hash );
		
		rutaEquipos.put(LIGA_SANMIGUEL_ID, LIGA_SANMIGUEL_RUTA_EQUIPOS);
		rutaEquipos.put(LIGA_EUSKOTREN_ID, LIGA_EUSKOTREN_RUTA_EQUIPOS);
		
		rutaCalendario.put(LIGA_SANMIGUEL_ID, LIGA_SANMIGUEL_RUTA_CALENDARIO);
		rutaCalendario.put(LIGA_EUSKOTREN_ID, LIGA_EUSKOTREN_RUTA_CALENDARIO);
		
		hash.put(LIGA_SANMIGUEL_ID, loadDataLiga(LIGA_SANMIGUEL_ID));
		hash.put(LIGA_EUSKOTREN_ID, loadDataLiga(LIGA_EUSKOTREN_ID));
				
		Log.e("DataManager", "Constructora terminada");
	}
	
	
	
	/**
	 * 
	 * @return
	 */
	public static synchronized DataManager getDataManager(){
		Log.e("DataManager", "a devolver instancia de DataManager, manager= " + manager);
		if(manager == null){
			manager = new DataManager();
		}
		Log.e("DataManager", "manager es null?" + (manager==null));
		return manager;	
	}
	
	/**
	 * 
	 * @param id
	 * @return
	 */
	public Liga getLiga(String id){
		Log.e("DataManager.getLiga", "ID recibido " + id + " existe en hash => " + this.hash.containsKey(id));
		if(!this.hash.containsKey(id))
			return null;
		//if(this.hash.get(id)==null)
		this.hash.put(id, loadDataLiga(id));
		return this.hash.get(id);
	}
	
	/**
	 * 
	 * @param id
	 */
	public Liga loadDataLiga(String id){
		//if(this.hash.get(id)!=null)return null;
		Log.d("DataManager.loadAdataLiga", "a cargar datos");
		Liga liga = new Liga();
		liga.setEquipos(this.loadEquiposLiga(id));
		liga.setEstropadak(this.loadCalendarioLiga(id));
		return liga;
	}
	
	/**
	 * 
	 * @param id
	 * @return
	 */
	private ListaEstropada loadCalendarioLiga(String id){
		Log.d("DataManager.loadCalendarioLiga", "a cargar calendarios liga " + id);
		SAXParserFactory spf = SAXParserFactory.newInstance();
		try {
			//get a new instance of parser
			SAXParser sp = spf.newSAXParser();
			
			InputStream is = null;
			
			if(id.equals(LIGA_SANMIGUEL_ID)){
				//is = context.getResources().openRawResource(R.xml.estropadak_lsm);
				is = context.getAssets().open("estropadak_lsm.xml");
			}else{
				is = context.getAssets().open("estropadak_let.xml");
				//is = context.getResources().openRawResource(R.xml.estropadak_let);
			}
				//new FileInputStream(Thread.currentThread().getContextClassLoader().getResource(this.rutaCalendario.get(id)).getFile());
			EstropadakParser estropadak = new EstropadakParser();
			sp.parse(is, estropadak);
			Log.d("DataManager.loadEquiposLiga", "a cargar calendarios-> Ha terinado OK");
			return estropadak.le;
		}catch(Exception saxe){
			Log.e("DataManager.loadCalendarioLiga", saxe.getClass().getName() + ": " + saxe.getMessage(), saxe);
			return null;
		}
	}
	
	/**
	 * 
	 * @param id
	 * @return
	 */
	private ListaTaldea loadEquiposLiga(String id){
		Log.d("DataManager.loadEquiposLiga", "a cargar datos de equipos");
		SAXParserFactory spf = SAXParserFactory.newInstance();
		try {
			//get a new instance of parser
			SAXParser sp = spf.newSAXParser();
			
			InputStream is = null;
			if(id.equals(LIGA_SANMIGUEL_ID)){
				//is = context.getResources().openRawResource(R.xml.taldeak_lsm);
				is = context.getAssets().open("taldeak_lsm.xml");
			}else{
				//is = context.getResources().openRawResource(R.xml.taldeak_let);
				is = context.getAssets().open("taldeak_let.xml");
			}
				//new FileInputStream(Thread.currentThread().getContextClassLoader().getResource(this.rutaEquipos.get(id)).getFile());
			TaldeakParser parser = new TaldeakParser();
			sp.parse(is, parser);
			Log.d("DataManager.loadEquiposLiga", "a cargar datos de equipos-> Ha terinado OK");
			return parser.lisTalde;
		}catch(Exception saxe){
			Log.e("DataManager.loadCalendarioLiga", saxe.getClass().getName() + ": " + saxe.getMessage(), saxe);
			return null;
		}
		
	}
	
	
	
	
}
